package com.test.comlection;

public class ArrayList<E> {
    private int size = 0;
    private int capacity = 10;//表的容量
    private Object[] array = new Object[capacity];

    //添加元素操作
    public void add(E element,int index)
    //插入的元素和插入的位置
    {
        if(index<0 || index>size)//检测选择插入的位置是否合法
            throw new IndexOutOfBoundsException("插入位置非法，合法的插入位置为:0~"+size);

        if(size>=capacity)//当存储元素充满表的容量时
        {
            int newCapacity = capacity + (capacity >> 1);//扩容为原来的1.5倍
            Object[] newArray = new Object[newCapacity];//创建新的对象
            System.arraycopy(array,0,newArray,0,size);//拷贝旧表内的元素到新表，拷贝size个
            array = newArray;//将旧表覆写
            capacity = newCapacity;//将旧容量覆写
        }

        for (int i = size; i > index; i--) //从最后一位开始不断将元素往后挪
        {
            array[i] = array[i - 1];
        }

        array[index] = element;//腾出位置后让新元素添加进表中
        size++;//插入完成后让size自增
    }

    //删除元素的操作
    @SuppressWarnings("unchecked")
    public E remove(int index){
        if(index<0 || index>size -1)
        {
            throw new IndexOutOfBoundsException("删除位置非法，合法的删除位置为:0~"+(size-1));
        }

        E element = (E)array[index];//获取被删除元素

        for(int i = index; i<size-1;i++)
            array[i] = array[i+1];

        size--;
        return element;
    }

    //判断表是否为空的操作
    public boolean isEmpty(){
        return size == 0;
    }

    //查询某位置上的元素
    public E get(int index){
        if(index<0 || index>size -1){
            throw new IndexOutOfBoundsException("查询位置非法，合法的删除位置为:0~"+(size-1));
        }

        return (E) array[index];
    }


    public String toString() {
        System.out.println("现在表的容量为:"+capacity);
        StringBuffer builder=new StringBuffer();
        for(int i=0;i<size;i++) builder.append(array[i]).append(" ");

        return builder.toString();

    }
}
